package homework;
import java.util.Scanner;
//编写程序接受用户输入的1~12之间的整数。如果不满足输入条件，则要求用户重新输入，并输出该数字所对应月份的天数。
public class 实验3 {

    // 定义静态常量，方便对后面的上下限进行限制，更符合程序设计的思想
    private static final int MIN_YEAR = 1;
    private static final int MAX_YEAR = 3000;
    private static final int MIN_MONTH = 1;
    private static final int MAX_MONTH = 12;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
//界面的优化
        System.out.println("==============================");
        System.out.println("   欢迎使用月份天数计算器");
        System.out.println("==============================");
        System.out.println("输入格式：年份.月份（例如：2025.10）\n");

        // 主循环
        while (true) {
            System.out.print("请输入年份和月份（用点分割）：");
            String input = sc.nextLine().trim();

            // 验证格式并解析，方法的使用
            if (!input.contains(".")) {
                System.out.println(" 格式错误！请使用格式：年份.月份\n");
                continue;
            }

            String[] parts = input.split("\\.");//正则表达式，转义字符的输出
        //健壮性考量
            if (parts.length != 2) {
                System.out.println(" 格式错误！请确保只有一个点号分隔\n");
                continue;
            }

            // 尝试解析年份和月份
            try {
                int year = Integer.parseInt(parts[0]);
                int month = Integer.parseInt(parts[1]);

                // 验证范围
                if (year < MIN_YEAR || year > MAX_YEAR) {
                    System.out.println("年份范围错误！请输入 " + MIN_YEAR + "-" + MAX_YEAR + " 之间的年份\n");
                    continue;
                }

                if (month < MIN_MONTH || month > MAX_MONTH) {
                    System.out.println("月份范围错误！请输入 " + MIN_MONTH + "-" + MAX_MONTH + " 之间的月份\n");
                    continue;
                }

                // 计算并输出结果
                int days = getDaysInMonth(year, month);
                System.out.println(year + "年" + month + "月有 " + days + " 天");

                // 2月份额外提示
                if (month == 2) {
                    System.out.println(year + "年是" + (isLeapYear(year) ? "闰年" : "平年"));
                }
                System.out.println();

            } catch (NumberFormatException e) {
                // 异常捕获：处理非数字输入
                System.out.println(" 请输入数字，不要包含字母或其他字符\n");
                continue;
            }

            // 询问是否继续
            System.out.print("是否继续？(yes/y 继续，其他退出)：");
            String choice = sc.nextLine().trim().toLowerCase();
            System.out.println();

            if (!choice.equals("yes") && !choice.equals("y")) {
                break;
            }
        }

        sc.close();
        System.out.println("感谢使用，再见！");
    }


     //判断是否为闰年

    private static boolean isLeapYear(int year) {
        return (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0);
    }


     // 获取指定年月的天数

    private static int getDaysInMonth(int year, int month) {
        switch (month) {
            case 1: case 3: case 5: case 7: case 8: case 10: case 12:
                return 31;
            case 4: case 6: case 9: case 11:
                return 30;
            case 2:
                return isLeapYear(year) ? 29 : 28;  // 闰年29天，平年28天
            default:
                return -1;
        }
    }
}